#-*- coding: UTF-8 -*-
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember
from pyramid.security import forget

from sqlalchemy.orm import eagerload


from scp.modelo.models import DBSession
from scp.modelo.Tipo_Item import Tipo_Item
from scp.modelo.Atributo import Atributo
from scp.modelo.Fase import Fase
from scp.modelo.Proyecto import Proyecto
from scp.modelo.Item import Item

from pyramid.response import Response
from pyramid.view import view_config
import json

import re

#@view_config(renderer='json')
def tipos_items(request):
	"""Método controlador encargado de la administración de los Tipos de Items.
		URL asociada: /tipos_items/{operacion}
		operacion:
			view, listado de tipos_items
			create, creación de un nuevo tipo_item
			update, edición de un tipo_item
			destroy, eliminacion de un tipo de item
		@param request: Petición Http del cliente. 	
	"""
	
	print ">>>>>>>>>>>>>Controlador de Tipos de Items - Inicio>>>>>>>>>>>>>>"
	print "request:"
	print request

	print '>>>>>>>>>>>>>>>request.metodo<<<<<<<<<<<<<<<<<<<<<<'
	
	methodRequest = request.method
	print methodRequest
	
	print '>>>>>>>>>>>>>>request.url<<<<<<<<<<<<<<<<<<<<<<<<<<'
	
	print request.url
	
	
	print '>>>>>>>>>>>>>>>reles_url<<<<<<<<<<<<<<<<<<<'
	
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	dicParametros = request.matchdict
	
	print request.matchdict
	print '>>>>>>>>>>>>>>request_matchdict<<<<<<<<<<<<'
	
	tipos_items_url = request.route_url('tipos_items', operacion=1)
	print tipos_items_url
	
	print "parametros abajo..."
	print request.params
	
	print 'request.body'
	print request.body 
	

	print "operaciónnnnnnnn"
	print dicParametros.get('operacion')
	print "operaciónnnnnnnn"
	
	
	if dicParametros.get('operacion') == 'update' or dicParametros.get('operacion') == 'create':
		print 'entre el if de update'
		
		print 'json.loads(request.params[tipo_item])'
		tipo_item = json.loads(request.params['tipo_item'])
		print json.loads(request.params['tipo_item'])
		print 'tipo_item.data'
		tipo_itemData = tipo_item.get('data')
		print tipo_item.get('data')
		print 'tipo_item.data.nombreTipo_Item'
		print tipo_itemData.get('nombreTipo_Item')
		print 'json.loads(request.params[ids_atributos])'
		atributos = json.loads(request.params['ids_atributos'])
		print atributos
	
	print 'dicParametros.get(operacion).find(?):' 
	print dicParametros.get('operacion').find('?')
	
	session = DBSession()
	if dicParametros.get('operacion') == 'view' and request.url.find('?') == -1:
		print 'respondí un diccionario normal'
		return {'content':'Hello!'}	
	elif dicParametros.get('operacion') == 'view':
		tipos_itemsAll = session.query(Tipo_Item).filter_by(proyecto_id=json.loads(request.params['idProyecto'])).all()
		
		tipos_itemsArray = []
		for tipo_itemIter in tipos_itemsAll:
			aux = {'idTipo_Item': tipo_itemIter.id, 'nombreTipo_Item': tipo_itemIter.nombre, 'descripTipo_Item':tipo_itemIter.descripcion, 'observTipo_Item':tipo_itemIter.observacion}
			tipos_itemsArray.append(aux)
		
		responseView = Response()
		responseView.body = json.dumps(dict(success = True, tipos_items = tipos_itemsArray))
		responseView.content_type = 'application/json'
		
		print 'respondí con un Responseeeee!!!'
		return responseView
	elif dicParametros.get('operacion') == 'create':
		responseCreate = Response()
		proyecto = json.loads(request.params['idProyecto'])
	
		tipo_item = Tipo_Item()
		tipo_item.nombre = tipo_itemData.get('nombreTipo_Item')
		tipo_item.descripcion = tipo_itemData.get('descripTipo_Item')
		tipo_item.observacion = tipo_itemData.get('observTipo_Item')
		tipo_item.proyecto_id = proyecto
		
		atributosArray = []
		
		for idAtributo in atributos:
			atributo = session.query(Atributo).filter_by(id=idAtributo).first()
			atributosArray.append(atributo)
		
				
		tipo_item.atributos =  atributosArray
		
		session.add(tipo_item)		
		
		responseCreate.body = json.dumps(dict(success = True))
		responseCreate.content_type = 'application/json'	
	
		return responseCreate
	elif dicParametros.get('operacion') == 'update':
		responseUpdate = Response()
		tipo_itemNombre = session.query(Tipo_Item).filter_by(nombre=tipo_itemData.get('nombreTipo_Item')).first()
		tipo_itemUpdate = session.query(Tipo_Item).filter_by(id=tipo_itemData.get('idTipo_Item')).first()
		if tipo_itemNombre is not None and tipo_itemNombre.id != tipo_itemUpdate.id:
			responseUpdate.body = json.dumps(dict(success = False, msg = 'Ya existe un nombre de tipo de item igual!!!'))
			responseUpdate.content_type = 'application/json'
		else:	
			tipo_itemUpdate.nombre = tipo_itemData.get('nombreTipo_Item')
			tipo_itemUpdate.descripcion = tipo_itemData.get('descripTipo_Item')
			tipo_itemUpdate.observacion = tipo_itemData.get('observTipo_Item')
			
			idsAtributosEditar = json.loads(request.params['ids_atributos'])
		
			print '>>>idsAtributosEditar'
			print idsAtributosEditar
			
			atributosArray = []
			
			for idAtributo in idsAtributosEditar:
				print '>>idAtributo en el ciclo!!'
				print idAtributo
				atributo = session.query(Atributo).filter_by(id=idAtributo).first()
				atributosArray.append(atributo)
			
			
			
			tipo_itemUpdate.atributos = atributosArray
			
			responseUpdate.body = json.dumps(dict(success = True, ))
			responseUpdate.content_type = 'application/json'
			
		return responseUpdate
	elif dicParametros.get('operacion') == 'destroy':
		print 'entre en el if de update'
		
		idTipo_ItemEliminar = json.loads(request.params['param_id'])
		tipo_itemEliminar = session.query(Tipo_Item).filter_by(id=idTipo_ItemEliminar).first()
		proyecto = session.query(Proyecto).filter_by(id=tipo_itemEliminar.proyecto_id).first()
		responseDestroy = Response()
		if proyecto.estado == 'ACTIVO':
			item = session.query(Item).filter_by(tipoItem_id=idTipo_ItemEliminar).first()
			if item is None:
				session.delete(tipo_itemEliminar)
				responseDestroy.body = json.dumps(dict(success = True))
			else:
				responseDestroy.body = json.dumps(dict(success = False, msg = "No se puede eliminar, ya existe un Item asociado!!!"))
		else:
			session.delete(tipo_itemEliminar)
			responseDestroy.body = json.dumps(dict(success = True))
		
		
		
		
		
		responseDestroy.content_type = 'application/json'
		
		return responseDestroy
		
	elif dicParametros.get('operacion') == 'editarFase':
		proyecId = json.loads(request.params['idProyecto'])
		faseEditado = session.query(Fase).filter_by(proyecto_id=proyecId, id=request.params['idFase']).first()
		
		print ">>>id FASE recibido de la vista!!"
		print request.params['idFase']
		
		print '>>>FASE a ser Editado!'
		print faseEditado.nombre
		
		
		tipos_itemsAllEdit = faseEditado.tipos_items
		tipos_itemsArrayEdit = []
		for tipo_itemIter in tipos_itemsAllEdit:
			aux = tipo_itemIter.id
			tipos_itemsArrayEdit.append(aux)	
	
		response = Response()
	
		response.body = json.dumps(dict(success = True, tipo_item = tipos_itemsArrayEdit))
		response.content_type = 'application/json'
		return response
